/**
 * 日期格式化（支持自定义格式模板）
 * @param {Date|string|number} date - 日期（可传入 Date 对象、时间戳、日期字符串）
 * @param {string} format - 格式模板（默认 'yyyy-MM-dd'）
 *                         支持占位符：yyyy(年)、MM(月)、dd(日)、HH(时)、mm(分)、ss(秒)
 * @returns {string} - 格式化后的日期字符串
 */
function formatDate(date, format = 'yyyy-MM-dd') {
  // 1. 处理入参：将非 Date 对象转为 Date（兼容时间戳、日期字符串）
  if (!(date instanceof Date)) {
    date = new Date(date);
  }

  // 2. 校验日期有效性
  if (isNaN(date.getTime())) {
    console.error('格式化为日期失败：传入的日期无效', date);
    return ''; // 或抛出错误、返回原数据，根据需求调整
  }

  // 3. 提取日期各部分
  const year = date.getFullYear();
  const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份 0-11 → 1-12，补0
  const day = String(date.getDate()).padStart(2, '0'); // 日期 1-31，补0
  const hours = String(date.getHours()).padStart(2, '0'); // 小时 0-23，补0
  const minutes = String(date.getMinutes()).padStart(2, '0'); // 分钟 0-59，补0
  const seconds = String(date.getSeconds()).padStart(2, '0'); // 秒 0-59，补0

  // 4. 替换格式模板中的占位符（支持任意组合）
  return format.replace(/yyyy/g, year)
               .replace(/MM/g, month)
               .replace(/dd/g, day)
               .replace(/HH/g, hours)
               .replace(/mm/g, minutes)
               .replace(/ss/g, seconds);
}

/**
 * 检查两个日期是否在两天之内（包含2天）
 * @param {string|number} date1 - 日期1（时间戳或字符串格式）
 * @param {string|number} date2 - 日期2（时间戳或字符串格式）
 * @param {string|number} day - 天数
 * @returns {boolean} - day天之内返回true，否则返回false
 */
function isWithinNumberDays(date1, date2, day = 1) {
  console.log(date1, date2)
  // 将日期转换为时间戳（毫秒）
  const time1 = new Date(date1).getTime();
  const time2 = new Date(date2).getTime();
  
  // 计算时间差（绝对值）
  const timeDiff = Math.abs(time1 - time2);
  
  // 转换为天数（1天 = 86400000毫秒）
  const daysDiff = timeDiff / 86400000;
  
  // 判断是否在两天之内（包含2天）
  return daysDiff <= day;
}

export default {
  formatDate,
  isWithinNumberDays
}